RAG Agent Portfolio - Documentación Técnica
Autor: Jesus Dones
Fecha: Enero 2025
Versión: 1.0.0
Resumen del Proyecto
Este proyecto implementa un RAG (Retrieval-Augmented Generation) Agent integrado
en un portfolio web personal. El agente permite a los visitantes hacer preguntas sobre mi background,
experiencia y proyectos, respondiendo en primera persona como si fuera yo mismo.
Stack Tecnológico
AWS Lambda
AWS API Gateway
AWS DynamoDB
AWS S3
AWS CloudWatch
AWS SSM Parameter Store
Groq API
Python 3.11
JavaScript
HTML5/CSS3
Características Principales
- RAG Agent con búsqueda por palabras clave
- Widget de Chat integrado en el portfolio
- Arquitectura Serverless completamente en AWS
- Caché DynamoDB para optimización de costos y velocidad
- Seguridad completa (CORS, CSP, Validación de Input, Rate Limiting)
- Monitoreo CloudWatch con dashboard personalizado
- Respuestas en primera persona sobre mi experiencia
Arquitectura del Sistema
Frontend
- Hosting: AWS S3 (Static Website Hosting)
- Tecnologías: HTML5, CSS3, JavaScript (Vanilla)
- Widget: Chat widget personalizado integrado
Backend
- API: AWS API Gateway (REST API)
- Compute: AWS Lambda (Python 3.11)
- Cache: AWS DynamoDB (TTL: 24 horas)
- Storage: AWS S3 (documentos pre-procesados)
- Secrets: AWS SSM Parameter Store
- Monitoring: AWS CloudWatch
LLM Provider
- Servicio: Groq API
- Modelo: llama-3.1-8b-instant
Flujo de Datos
- Usuario escribe pregunta en el widget de chat
- Frontend envía POST request a API Gateway
- API Gateway valida CORS y aplica Rate Limiting
- Lambda Function valida el input (longitud, injection, spam)
- Lambda genera hash de la query y busca en DynamoDB cache
- Si hay cache hit: retorna respuesta inmediatamente
- Si hay cache miss:
- Descarga documents.json desde S3
- Realiza búsqueda por palabras clave
- Construye prompt con contexto relevante
- Llama a Groq API
- Guarda respuesta en DynamoDB cache
- Retorna respuesta al usuario
Seguridad Implementada
| Medida |
Implementación |
| CORS |
Orígenes permitidos específicos (portfolio.yamudev.com, localhost) |
| CSP |
Content Security Policy en HTML meta tag |
| Input Validation |
Validación de longitud, detección de prompt injection, sanitización HTML/JS, detección de spam |
| Rate Limiting |
API Gateway: 50 burst, 10 req/s |
| IAM Roles |
Políticas restrictivas (solo acceso necesario) |
| Secrets Management |
API Key almacenada en SSM Parameter Store (encriptado) |
Optimizaciones
Caché DynamoDB
- TTL: 24 horas
- Key: SHA256 hash de la query
- Beneficios: Reduce costos de Groq API, mejora latencia, reduce carga en Lambda
- Hit Rate Esperado: 30-50%
Cache en Memoria (Lambda)
- Cache de documents.json durante la invocación
- Evita múltiples descargas de S3
Monitoreo
CloudWatch Dashboard con 4 widgets principales:
- Lambda Invocations (Sum)
- Lambda Errors (Sum)
- Lambda Duration (Average)
- API Gateway Requests (Sum)
Costos Estimados
| Servicio |
Uso Estimado |
Costo Mensual |
| Lambda |
10,000 invocaciones |
$0.00 (Free Tier) |
| API Gateway |
10,000 requests |
$0.00 (Free Tier) |
| S3 |
1 GB almacenamiento |
$0.023 |
| DynamoDB |
1 GB almacenamiento |
$0.00 (Free Tier) |
| CloudWatch |
Métricas estándar |
$0.00 |
| Groq API |
5,000 queries |
$0.00 - $1.35 |
| TOTAL |
|
$0.00 - $1.50/mes |
Despliegue
Prerrequisitos
- AWS CLI configurado
- Python 3.11+
- PowerShell (Windows)
- Cuenta Groq con API key
Pasos Principales
- Procesar documentos localmente (PDF → JSON)
- Subir documents.json a S3
- Crear recursos AWS (Lambda, API Gateway, DynamoDB, etc.)
- Configurar seguridad (CORS, Rate Limiting, IAM)
- Configurar monitoreo (CloudWatch Dashboard)
- Desplegar frontend a S3
Mejoras Futuras
- Búsqueda Semántica con embeddings (mejor precisión)
- Contexto de conversación (mantener historial)
- Métricas custom (tracking de queries populares)
- Alarmas CloudWatch (notificaciones por email)